package com.qidian.mes.md.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qidian.mes.md.mapper.MdItemMapper;
import com.qidian.mes.md.mapper.MdItemTypeMapper;
import com.qidian.mes.md.mapper.MdUnitMeasureMapper;
import com.qidian.mes.md.service.MdItemService;
import com.qidian.mes.pojo.Dict;
import com.qidian.mes.pojo.MdItem;
import com.qidian.mes.pojo.MdItemType;
import com.qidian.mes.pojo.MdUnitMeasure;
import com.qidian.mes.util.pojo.MESResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Calendar;
import java.util.List;
import java.util.Objects;

/**
 * @Author 32郗建狄
 * @Company GX631
 * Time 2023/10/26 16:06
 * Description
 */
@Service
public class MdItemServiceImpl implements MdItemService {
    @Autowired
    private MdItemMapper mdItemMapper;
    @Autowired
    private MdUnitMeasureMapper mdUnitMeasureMapper;
    @Autowired
    private MdItemTypeMapper mdItemTypeMapper;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Override
    public MESResult get(Long id) {
        return MESResult.ok(mdItemMapper.get(id));
    }

    @Override
    public MESResult list(int page, int limit, MdItem mdItem) {

//        if (Objects.nonNull(mdItem.getItemId())){
//            MdItemType mdItemType = mdItemTypeMapper.get(mdItem.getItemTypeId());
//            if (mdItemType.getItemOrProduct().equals("item")){
//                mdItem.setItemOrProduct("item");
//            }else {
//                mdItem.setItemOrProduct("product");
//            }
//        }
        // 开启分页 在当前线程中执行下一条SQL的时候就会进行分页。
        PageHelper.startPage(page,limit);
        List<MdItem> list = mdItemMapper.list(mdItem);
        // 组织一个分页对象。（页码，每页大小，最大页码，数据，总条数）
        PageInfo<MdItem> pageInfo = new PageInfo<>(list);
        return MESResult.ok(pageInfo);
    }

    @Override
    public MESResult save(MdItem mdItem) {

        if (Objects.nonNull(mdItem)){
            Long measureId = mdItem.getMeasureId();         //获取前端物料对象的单位ID
            MdUnitMeasure mdUnitMeasure = mdUnitMeasureMapper.get(measureId);
            mdItem.setMeasureName(mdUnitMeasure.getMeasureName());      //根据单位ID查到单位名并设置到物料中的单位名
            MdItemType mdItemType = mdItemTypeMapper.get(mdItem.getItemTypeId());   //根据物料分类ID 将分类编码 分类名和 物料/产品标识设置到mdItem对象中
            mdItem.setItemTypeCode(mdItemType.getItemTypeCode());
            mdItem.setItemTypeName(mdItemType.getItemTypeName());
            mdItem.setItemOrProduct(mdItemType.getItemOrProduct());


            return MESResult.updateIsOk(mdItemMapper.save(mdItem));
        }
        return MESResult.empty();

    }

    @Override
    public MESResult deleteByItemId(Long id) {
        if (Objects.nonNull(id)){
            return MESResult.ok(mdItemMapper.delete(id));
        }
        return null;
    }

    @Override
    public MESResult deletesByItemId(Long[] id) {
        if (id.length>0){
            return MESResult.ok(mdItemMapper.deletes(id)+"");   //转成字符串传到前端 回显删除了多少个
        }
        return MESResult.empty();
    }

    @Override
    public MESResult generateItemCode() {

            String key = "itemID";

            StringBuilder id = new StringBuilder();
            // 固定部分-可能需要从数据库查询
            id.append("IT");
            // 时间
            Calendar calendar = Calendar.getInstance();
            id.append(calendar.get(Calendar.YEAR) + "" +
                    (calendar.get(Calendar.MONTH) + 1) +
                    calendar.get(Calendar.DATE));
            // 从redis获取序列
            Long idTemp =
                    stringRedisTemplate.opsForValue().increment(key);
            String idStr = idTemp.toString();
            if(idStr.length() < 5){
            // 前面加0
                for (int i = 0;i < 5 - idStr.length();i++){
                    idStr = "0" + idStr;
                }
            }
            id.append(idStr);
            return MESResult.ok(id);
    }

    @Override
    public MESResult update(MdItem mdItem) {

        if (Objects.nonNull(mdItem)){
            Long measureId = mdItem.getMeasureId();         //获取前端物料对象的单位ID
            MdUnitMeasure mdUnitMeasure = mdUnitMeasureMapper.get(measureId);
            mdItem.setMeasureName(mdUnitMeasure.getMeasureName());      //根据单位ID查到单位名并设置到物料中的单位名
            MdItemType mdItemType = mdItemTypeMapper.get(mdItem.getItemTypeId());   //根据物料分类ID 将分类编码 分类名和 物料/产品标识设置到mdItem对象中
            mdItem.setItemTypeCode(mdItemType.getItemTypeCode());
            mdItem.setItemTypeName(mdItemType.getItemTypeName());
            mdItem.setItemOrProduct(mdItemType.getItemOrProduct());

            return MESResult.updateIsOk(mdItemMapper.update(mdItem));
        }
        return MESResult.empty();

    }
}
